{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 问题：简述 Django 下的（内建）缓存机制\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "面试官想从这道题中考察面试人什么？\n",
    "利用缓存访问一些数据可以减少数据库的访问，从而可以提高网站性能。缓存技术在很多网站中被使用，而缓存的解决方案也是各式各样。\n",
    "\n",
    "答案\n",
    "缓存是将一些常用的数据保存内存或者 memcache 中，在一定的时间内有人来访问这些数据时，则不再去执行数据库及渲染等操作，而是直接从内存或 memcache 的缓存中去取得数据，然后返回给用户。Django 提供了6 种内存缓存机制，分别为：\n",
    "\n",
    "开发调试缓存（为开发调试使用，实际上不使用任何操作）；\n",
    "内存缓存（将缓存内容缓存到内存中）；\n",
    "文件缓存（将缓存内容写到文件 ）；\n",
    "数据库缓存（将缓存内容存到数据库）；\n",
    "memcache 缓存（包含两种模块，python-memcached或pylibmc.）。\n",
    "拓展\n",
    "缓存存在的意义是什么呢？比如你访问一个页面，有些时候第一次打开你发现会非常的慢，但过会儿刷新发现比第一次要快很多，这可能就是缓存发挥作用了。\n",
    "\n",
    "Django 带有一个强大的缓存系统，它提供了不同级别的缓存粒度：你可以缓存特定视图，也可以只缓存难生成的部分内容，或者缓存整个网站。可以通过配置文件的缓存配置来指明你的缓存数据所存放的位置，比如文件系统，数据库或内存。\n",
    "\n",
    "而 Memcached 是 Django 原生支持的最快、最高效的缓存类型，它是基于内存的缓存服务器。在settings.py中有个全局变量CACHES，它是个字典，在里面设置Memcached 绑定，以及缓存数据的地址，像下面这样。\n",
    "\n",
    "CACHES = {\n",
    "    'default': {\n",
    "        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',\n",
    "        'LOCATION': [\n",
    "            '172.19.26.240:11211', # 缓存服务器地址以及端口\n",
    "            '172.19.26.242:11211',\n",
    "        ]\n",
    "    }\n",
    "}\n",
    "因为缓存的数据存储在内存中，如果服务器崩溃，那么数据将会丢失。显然，内存不适用于持久数据存储，因此不要依赖基于内存的缓存作为你唯一的数据存储。\n",
    "\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
